Exploration of conversions

Overall graph

The overall distribution of conversions, by location and by transitivity

Helper functions

We define the filters that we found for call sites:

And some helper traversal functions:

All conversions per use

Modify the dataset to count conversions:

Output the graph

Exploration of transitive conversions

First we filter the dataset

And finally, we can produce the graph

Non-transitive conversions

Now let’s plot the non-transitive conversion distribution. First, we filter out the transitive calls:

Then, we get the frequency counts, and we print it:

This is not extremely useful, unfortunately.

We can envision another graph, with the same data but the axes changed:

Now, if we don’t mush the projects together, maybe we can gather some metadata. First, load the project stats.

Then, add LOC information to the nontransitive conversions:

Types HOF

Halls of fame for all projects

Halls of fame for Kamon

Halls of fame for Better-files

Halls of fame for Json4s

Halls of fame for Quill

Identifying library primitives

Non transitive conversions in main

Delving deeper into slick

signature occurrences
(slick.ast.FunctionSymbol[]) => slick.lifted.FunctionSymbolExtensionMethods[] 31
(slick.ast.Type[]) => slick.ast.TypeUtil[] 61
(slick.ast.Node[]) => slick.ast.NodeOps[] 121
That was with call sites, let’s go with definitions